# -*- coding: utf-8 -*-
"""
初始化活动数据管理命令

创建默认活动类型和测试活动数据
"""

from django.core.management.base import BaseCommand
from django.contrib.auth import get_user_model
from django.utils import timezone
import random
from datetime import timedelta

from activities.models import Activity, ActivityType

User = get_user_model()


class Command(BaseCommand):
    """初始化活动数据管理命令"""
    
    help = '初始化活动类型和测试活动数据'
    
    def handle(self, *args, **options):
        """命令执行逻辑"""
        self.stdout.write(self.style.SUCCESS('开始初始化活动数据...'))
        
        # 1. 创建活动类型
        self._create_activity_types()
        
        # 2. 确保有测试用户
        self._ensure_test_user()
        
        # 3. 创建测试活动
        self._create_test_activities()
        
        self.stdout.write(self.style.SUCCESS('活动数据初始化完成！'))
    
    def _create_activity_types(self):
        """创建默认活动类型"""
        self.stdout.write('创建活动类型...')
        
        types = [
            {'name': '运动健身', 'sort_order': 100, 'is_system': True, 'description': '各类运动、健身、户外等活动'},
            {'name': '学习交流', 'sort_order': 90, 'is_system': True, 'description': '讲座、读书会、技能分享等活动'},
            {'name': '美食聚会', 'sort_order': 80, 'is_system': True, 'description': '聚餐、美食制作、品尝等活动'},
            {'name': '亲子活动', 'sort_order': 70, 'is_system': True, 'description': '适合家庭和儿童参与的活动'},
            {'name': '旅游出行', 'sort_order': 60, 'is_system': True, 'description': '短途旅行、户外探险等活动'},
            {'name': '文化艺术', 'sort_order': 50, 'is_system': True, 'description': '展览、演出、手工制作等活动'},
            {'name': '志愿公益', 'sort_order': 40, 'is_system': True, 'description': '志愿服务、公益项目等活动'},
        ]
        
        created_count = 0
        for t_data in types:
            type_obj, created = ActivityType.objects.get_or_create(
                name=t_data['name'],
                defaults=t_data
            )
            if created:
                created_count += 1
                self.stdout.write(f"  创建活动类型: {t_data['name']}")
        
        self.stdout.write(self.style.SUCCESS(f'活动类型创建完成，新增 {created_count} 个类型'))
    
    def _ensure_test_user(self):
        """确保有测试用户"""
        self.stdout.write('检查测试用户...')
        
        # 创建默认测试用户
        try:
            self.test_user = User.objects.get(username='testuser')
            self.stdout.write('  使用现有测试用户: testuser')
        except User.DoesNotExist:
            self.test_user = User.objects.create_user(
                username='testuser',
                email='test@example.com',
                password='testpassword123',
                nickname='测试用户'
            )
            self.stdout.write('  创建新测试用户: testuser')
    
    def _create_test_activities(self):
        """创建测试活动数据"""
        self.stdout.write('创建测试活动数据...')
        
        # 获取所有活动类型
        activity_types = list(ActivityType.objects.all())
        
        # 如果没有活动类型，先创建一些基本类型
        if not activity_types:
            self.stdout.write(self.style.WARNING('没有活动类型，创建默认类型...'))
            default_type = ActivityType.objects.create(
                name='其他活动',
                sort_order=0,
                is_system=False
            )
            activity_types = [default_type]
        
        # 活动标题和描述模板
        titles = [
            '周末户外徒步活动',
            '城市摄影爱好者聚会',
            'Python编程入门讲座',
            '社区篮球友谊赛',
            '亲子手工制作工作坊',
            '咖啡品鉴会',
            '环保志愿者活动',
            '读书会：现代文学分享',
            '瑜伽体验课',
            '社区美食节'
        ]
        
        descriptions = [
            '欢迎大家参加我们组织的户外活动，一起享受大自然的美好时光！',
            '无论你是摄影新手还是资深爱好者，都欢迎来交流学习，分享你的作品。',
            '从零开始学习Python编程，适合没有编程基础的朋友参加。',
            '一场轻松愉快的篮球友谊赛，欢迎各位篮球爱好者报名参加。',
            '和孩子一起动手制作手工艺品，增进亲子感情，培养创造力。',
            '专业咖啡师教你如何品鉴咖啡，了解咖啡文化和冲泡技巧。',
            '一起参与环保活动，为美化我们的社区贡献一份力量。',
            '分享你最近读过的好书，交流读书心得，结识志同道合的朋友。',
            '专业瑜伽教练指导，帮助你放松身心，改善体态。',
            '品尝来自各地的美食，体验不同的饮食文化。'
        ]
        
        locations = [
            '中央公园',
            '文化中心',
            '科技创新园区',
            '社区体育场',
            '青少年宫',
            '精品咖啡馆',
            '城市绿化带',
            '图书馆',
            '健身中心',
            '社区广场'
        ]
        
        addresses = [
            '北京市朝阳区公园路88号',
            '上海市静安区文化大道123号',
            '广州市天河区科技路45号',
            '深圳市南山区体育路66号',
            '杭州市西湖区青少年路78号',
            '成都市锦江区咖啡街99号',
            '武汉市江汉区绿化大道101号',
            '西安市雁塔区图书馆路25号',
            '南京市玄武区健身路33号',
            '重庆市渝中区社区路55号'
        ]
        
        # 创建活动数据
        created_count = 0
        existing_count = Activity.objects.count()
        
        # 创建10个测试活动
        for i in range(10):
            # 随机生成活动时间（未来7天内）
            start_time = timezone.now() + timedelta(days=random.randint(1, 7), hours=random.randint(9, 16))
            end_time = start_time + timedelta(hours=random.randint(1, 4))
            
            # 创建活动
            activity = Activity.objects.create(
                title=titles[i],
                description=descriptions[i],
                activity_type=random.choice(activity_types),
                creator=self.test_user,
                start_time=start_time,
                end_time=end_time,
                registration_deadline=start_time - timedelta(hours=2),
                location_name=locations[i],
                location_address=addresses[i],
                latitude=39.9042 + random.uniform(-0.1, 0.1),  # 北京附近随机坐标
                longitude=116.4074 + random.uniform(-0.1, 0.1),
                max_participants=random.randint(10, 50),
                current_participants=0,
                is_free=random.choice([True, False]),
                fee=random.uniform(0, 200) if not random.choice([True, False]) else 0,
                status='published',
                view_count=random.randint(0, 100),
                like_count=random.randint(0, 50),
                comment_count=random.randint(0, 20),
                rating_average=random.uniform(3.0, 5.0) if random.randint(0, 1) else 0
            )
            
            created_count += 1
            self.stdout.write(f"  创建活动: {activity.title}")
        
        self.stdout.write(self.style.SUCCESS(f'测试活动创建完成，新增 {created_count} 个活动，总计 {existing_count + created_count} 个活动'))